/**
 * 
 * Neo Touchable RIA Framework - A Web RIA Javascript Framework
 * 
 * Copyright (c) 2012
 * Dual licensed under the MIT or GPL v2 licenses.
 * 
 * @author  CuTe_CuBe
 * @version $Id: dom.js 5 2012-03-09 10:44:54Z CC.HGFeng@gmail.com $
 */

/**
 * 提供简单Dom方法封装
 * 
 */
NTR.Dom = {

    /**
     * 通过 CSS Selector 查询元素
     * powered by Sizzle (http://www.sizzlejs.com)
     * 
     * @param string id
     * @param HTMLDomElement doc
     * @return mixed
     */
    query: function(selector, doc) {
        if (undefined === doc) {
            doc = document;
        }
        
        return Sizzle(selector, doc);
    },

    /**
     * 通过ID查询元素
     * 只通过ID查询时应该优先使用get方法
     * 
     * @param string id
     * @param HTMLDomElement doc
     * @return mixed
     */
    get: function(id, doc) {
        if (undefined === doc) {
            doc = document;
        }
        
        return doc.getElementById(id);
    },

    /**
     * 创建Dom节点对象
     * 
     * @param string tag
     * @param HTMLDomElement doc
     * @return void
     */
    create: function(tag, doc) {
        if (undefined === doc) {
            doc = document;
        }

        if ((/[a-z]+/i).test(tag)) {
            return document.createElement(tag);
        } else {
            var frag = doc.createDocumentFragment();
            frag.innerHTML = tag;

            return frag.childNodes;
        }

        return null;
    },

    append: function() {
        
    },

    appendTo: function() {
        
    },

    /**
     * 是否 DomElement 对象
     * 
     * @param mixed object
     * @return boolean
     */
    isElement: function(object) {
        //return NTR.isObject(object) && undefined !== object.tagName;
    },

    /**
     * 节点列表
     * 
     * @param mixed object
     * @return boolean
     */
    isNodeList: function(object) {
        
    },

    /**
     * 遍历元素列表，执行回调函数
     * 
     * @param Array | HTMLDomElementList elements
     * @param Function func
     */
    each: function(elements, func) {
        if (NTR.isArray(elements) || NTR.Dom.isNodeList(elements)) {
            var i = 0, l = elements.length;
            for (; i < l; i++) {
                func.call(elements[i]);
            }
        }
        
        if (NTR.Dom.isElement(elements)) {
            func.call(elements);
        }
    },

    /**
     * 设置元素css样式
     * 
     * @param mixed elements
     * @param object | string css
     * @param css
     */
    css: function(elements, css) {
        if (NTR.isObject(css)) {
            var cssText = [];
            for (var k in css) {
                cssText[cssText.length] = k + ':' + css[k];
            }
            
            css = cssText.join(';');
        }
        
        if (!NTR.isString(css)) {
            return ;
        }
        
        NTR.Dom.each(elements, function(){
            this.style.cssText += css;
        });
    },

    /**
     * 设置元素属性
     * 
     * @param elements
     * @param name
     * @param value
     */
    attr: function(elements, name, value) {
        
    },

    /**
     * 移除元素属性
     * 
     * @param elements
     * @param name
     */
    removeAttr: function(elements, name) {
        
    },

    addClass: function(elements, className) {
        
    },

    removeClass: function(elements, className) {
        
    },
    
    /**
     * 指定元素是否包含给定css class
     * 如果传入是一个列表，只要列表中有一个元素包含则返回true
     * 
     * @param mixed  elements
     * @param string className
     * @return boolean
     */
    hasClass: function(elements, className) {
        
    }
};